import csv
from datetime import datetime
import matplotlib.pyplot as plt

filename = 'data/death_valley_2018_simple.csv'

with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader) # next转移至下个节点，并返回转移前节点，故此处header_row是第一行

    # for index, column_header in enumerate(header_row):
    #     print(index, column_header)

    # 从文件中获取最高温度
    dates, highs, lows = [], [], []
    for row in reader: # 遍历时自动跳过了第一行（利用next(reader)实现）
        current_date = datetime.strptime(row[2], '%Y-%m-%d') # 获取日期（第3个元素）
        try:
            high = int(row[4]) # 把每行第5(从0开始到4)个元素选出（最高温度TMAX所在列）
            low = int(row[5]) # 多加一个最低温度数据
        except ValueError: # 异常处理：数据异常
            print(f"Missing data for {current_date}") # 假设缺失数据会跳过此次添加数据
        else:
            dates.append(current_date)
            highs.append(high) # 加入到数组中
            lows.append(low)

# 根据最高温度和最低温度绘制图形
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red', alpha=0.5) # alpha表示透明度，0到1从完全透明到完全不透明
ax.plot(dates, lows, c='blue', alpha=0.5) # 在一个图上绘制两个折线
ax.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1) # fill_between()填充x值系列处，2个y值系列之间的位置

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 指定默认字体（解决中文无法显示的问题）
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号“-”显示方块的问题

# 设置图形的格式
title = "2018年每日最高/最低温度\n 美国加利福利亚州死亡谷"
ax.set_title(title, fontsize=20)
ax.set_xlabel('', fontsize=16)
fig.autofmt_xdate() # 绘制倾斜的日期标签，避免彼此重叠
ax.set_ylabel("温度(F)", fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16) # 刻度标记数字设置，axis可选x,y轴或都选，参数which的值为 'major'、'minor'、'both'，分别代表设置主刻度线、副刻度线以及同时设置，默认值为'major'
# axis:坐标轴   tick:标记号（刻度数字）  param:参数（parameter缩写）


plt.show()